import UnoCSS from 'unocss/vite'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
// 自动导入vue中hook reactive ref等
import AutoImport from 'unplugin-auto-import/vite'
// 自动导入ui-组件 比如说ant-design-vue  element-plus等
import Components from 'unplugin-vue-components/vite'
// ElementPlus
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// AntDesignVue
// import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'

// 加载开发模式的自定义环境变量（默认加载 .env.development 文件）
const env = loadEnv('development', process.cwd(), '')

export default defineConfig({
  plugins: [
    vue(),
    UnoCSS(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
      // 安装后在组件中不用再导入 ref，reactive 等
      imports: ['vue', 'vue-router'],
      // 存放的位置
      dts: 'src/auto-import.d.ts'
    }),
    Components({
      // 引入组件的,包括自定义组件
      // 存放的位置
      // 自动引入 ElementPlus 组件
      resolvers: [ElementPlusResolver()],
      // 自动引入 AntDesignVue 组件
      // resolvers: [AntDesignVueResolver()],
      dts: 'src/components.d.ts'
    })
  ],
  resolve: {
    alias: {
      '@': resolve(__dirname, './src')
    }
  },
  build: {
    // 是否生成map文件
    sourcemap: false,
    terserOptions: {
      compress: {
        // 发布时删除 console
        drop_console: true
      }
    },
    rollupOptions: {
      // 代码分割策略
      output: {
        manualChunks: {
          // 将 vue、axios 等高频使用、更新频率低的第三方库打包到独立的 vendor 文件（如 vendor.xxxxx.js）
          // 浏览器可长期缓存此类文件，避免业务代码更新时重复下载，减少网络请求体积
          vendor: ['vue', 'axios'] // 将指定依赖打包为 vendor 文件
        }
      }
    }
  },
  server: {
    // 允许外部访问
    host: '0.0.0.0',
    proxy: {
      '/api': {
        target: env.VITE_APP_BASE_URL,
        changeOrigin: true
        // rewrite: path => path.replace(/^\/api/, '')
      }
    }
  }
})
